/***************************************************************************
 *            principal.h
 *
 *  Ter janeiro 04 15:43:37 2011
 *  Copyright  2011  Alcione Ferreira
 *  <user@host>
 ****************************************************************************/
#include <bibliotecas.h>

#ifndef __PRINCIPAL_H__
#define __PRINCIPAL_H__ 1

#include <pdf-new.h>
#include <recibo.h>
#include <relatorio.h>
#include <financeiro.h>
#include <lcaixa.h>
#include <cconta.h>

/** Classe Template COLUNAS 
 ela reimplementa a classe Gtk::TreeModel::ColumnRecord e é utilizada para 
 TreeView e EntryCompletion.
 */
class COLUNAS : public Gtk::TreeModel::ColumnRecord
	{
	public : 
		/** Construtor da Classe COLUNAS */
		COLUNAS ();
		/** Destrutor da Classe COLUNAS */
		~COLUNAS ();
		Gtk::TreeModelColumn<int> cod_func;/**<Código do Funcionário */
		Gtk::TreeModelColumn<int> cod_acesso; /**<Código do Nível de Acesso */
		Gtk::TreeModelColumn<int> cod_cli;/**<Código do Cliente */
		Gtk::TreeModelColumn<int> codigo;/**<Código do Funcionário */
		Gtk::TreeModelColumn<int> tipo_jur;/**<Natureza Jurídica */
		Gtk::TreeModelColumn<int> cod_serv;/**<Código do Serviço */
		Gtk::TreeModelColumn<int> tipo_serv;/**<Código do Tipo de Serviço */
		Gtk::TreeModelColumn<Glib::ustring> descricao;/**<Campo para descrição. */
		Gtk::TreeModelColumn<Glib::ustring> campo[7];/**<Campos para TreeView */	
		Gtk::TreeModelColumn<float> campo_n;/**<Campo do tipo ponto flutuante. */
		Gtk::TreeModelColumn<bool> sel_recibo;/**<Campo do tipo bool.*/
		Gtk::TreeModelColumn<bool> imposto;/**<Campo do tipo bool.*/
		Gtk::TreeModelColumn<bool> credito;/**<Campo do tipo bool.*/
		Gtk::TreeModelColumn<bool> sub_issqn;/**<Campo do tipo bool.*/
		Gtk::TreeModelColumn<int> tipo;
		Gtk::TreeModelColumn<Glib::ustring> data;
		Gtk::TreeModelColumn<int> recibo;
		Gtk::TreeModelColumn<float> valor;

	private:
		int n_campos;/**<Quantidade de Campos. */
					
	};

/** Classe PRINCIPAL
 é responsável por chegar o acesso ao sistema e disponibilizar as ferramentas 
 necessárias para o usuário conforme seu nível de acesso 
 */
class PRINCIPAL
	{
	public:
		/** Construtor da Classe PRINCIPAL */
		PRINCIPAL();
		/** Destrutor da Classe PRINCIPAL */
		~PRINCIPAL();
		Gtk::RadioButton::Group CPF_CNPJ; /**< Grupo de Gtk::RadioButton utilizado para checar se o documento é de pessoa física(CPF) ou pessoa jurídica(CNPJ)*/
		Gtk::Window Conta;/**<Gtk::Window que mostra as configurações da conta do usuário logado.*/
		Gtk::Window Contas;/**<Gtk::Window que mostra as contas dos usuários do sistema.*/
		Gtk::Window Senha;/**<Gtk::Window que auxilia na troca de senha do usuário.*/
		Gtk::Window Login;/**<Gtk::Window usado para logar no sistema.*/
		Gtk::Window Principal;/**<Gtk::Window principal do sistema.*/
		Gtk::Window About;/**<Gtk::Window que mostra as informações do sistema.*/
		Gtk::Window Cliente;/**<Gtk::Window que mostra os clientes cadastrados.*/
		Gtk::Window Servico;/**<Gtk::Window que mostra os serviços cadastrados.*/
		Gtk::Window BaixaB;/**<Gtk::Window para efetuar baixas de recibos que estão em débito.*/
		Gtk::Window Saldos;/**<Gtk::Window para efetuar lançamentos de saldos.*/
		Gtk::Window *Novo;/**<Gtk::Window utilizada para cadastros novos.*/
		Gtk::Window *Editar;/**<Gtk::Window utilizada para edição de cadastros.*/
		int importa;/**<Atributo de controle da importação de dados.*/
		bool caixa;/**<*/
		bool escritura;/**<*/
		bool adm;
				
	protected:		
		Gtk::Statusbar BarraStatus1;/**<Gtk::Statusbar barra de status do sistema.*/
		guint statusbar1;/**<Atributo controlador da PRINCIPAL::BarraStatus1.*/
		
		Gtk::MenuBar *menu_barra;/**<Gtk::MenuBar menu principal.*/
		Gtk::Menu MenuFerr;/**<Gtk::Menu responsável pelo submenu das Ferramentas.*/
		Gtk::Menu MenuCadastro;/**<Gtk::Menu responsável pelo submenu dos Cadastro.*/
		Gtk::Menu MenuFerrConf;/**<Gtk::Menu responsável pelo submenu Configurações.*/
		Gtk::Menu MenuFerrImp;/**<Gtk::Menu responsável pelo submenu Importação.*/
		Gtk::Menu MenuFerrImpLanc;/**<Gtk::Menu responsável pelo submenu Importação Lançamentos.*/
		Gtk::Menu MenuRelatorio;/**<Gtk::Menu responsável pelo submenu dos Relatórios.*/
		Gtk::Menu MenuFinanceiro;/**<Gtk::Menu responsável pelo submenu do Controle Financeiro.*/
		Gtk::Menu MenuRelCred;/**<Gtk::Menu responsável pelo submenu do Relatório de Créditos.*/
		Gtk::Menu MenuRelRes;/**<Gtk::Menu responsável pelo submenu do Relatório de Resumos.*/
		Gtk::Menu MenuRelSerSel;/**<Gtk::Menu responsável pelo submenu do Relatório de Serviços/Selos.*/
		Gtk::Menu MenuImposto;/**<Gtk::Menu responsável pelo submenu do Configurações.*/
		Gtk::Menu MenuFinConta;/**<Gtk::Menu responsável pelo submenu do Contas Corrente.*/

		Gtk::Image *BImage;/**<Gtk::Image utilizado na tela principal como imagem de fundo.*/
		COLUNAS arvore_reg;/**<Estrutura de árvore para Gtk::TreeView.*/
		Glib::RefPtr<Gtk::ListStore> arvore_ref;/**<Ponteiro de referência para PRINCIPAL::arvore_reg*/
		Gtk::TreeModel::Row celula;/**<Atributo do tipo Gtk::TreeModel::Row. */
		Gtk::TextIter iter;/**<Gtk::TextIter iterador de Gtk::TextView.*/
		Gtk::TextIter inicio;/**<Gtk::TextIter iterador de Gtk::TextView.*/
		Gtk::TextIter final;/**<Gtk::TextIter iterador de Gtk::TextView.*/
		Glib::RefPtr<Gtk::TextTag> tag;/**<Ponteiro de Gtk::TextTag para Gtk::TextView.*/
		/** Método utilizado para checar nome.*/
		void checar_nome(int );
		//void checar_digito(int );
		/** Método utilizado para checar digito.*/
		void checar_digito(Gtk::Entry *, int );
		/** Método utilizado para locomover-se entre as Gtk::Entry de uma Gtk::Window. */
		void tabular_b(int );
		/** Método utilizado para selecionar uma linha de um Gtk::TreeView.*/
		void selecionado(const Gtk::TreeModel::Path& , Gtk::TreeViewColumn* );

		Gtk::HBox LoginB;/**<Gtk::HBox da tela PRINCIPAL::Login.*/
		Gtk::Fixed LoginT;/**<Gtk::Fixed da tela PRINCIPAL::Login.*/
		Gtk::Label LoginUL;/**<Gtk::Label da tela PRINCIPAL::Login.*/
		Gtk::Label LoginSL;/**<Gtk::Label da tela PRINCIPAL::Login.*/
		Gtk::Entry LoginUE;/**<Gtk::Entry da tela PRINCIPAL::Login que recebe o nome do usuário.*/
		Gtk::Entry LoginSE;/**<Gtk::Entry da tela PRINCIPAL::Login que recebe a senha do usuário.*/
		Gtk::Button *LoginOK;/**<Gtk::Button da tela PRINCIPAL::Login que efetua a checagem do login.*/
		Gtk::Button *LoginCancel;/**<Gtk::Button da tela PRINCIPAL::Login que cancela a operação de login.*/

		//Janela AboutDialog
		//About Mensagem
		Gtk::VBox AboutBOX;/**<Gtk::VBox da tela PRINCIPAL::About.*/
		Gtk::HBox About1;/**<Gtk::HBox da tela PRINCIPAL::About.*/
		Gtk::HBox About2;/**<Gtk::HBox da tela PRINCIPAL::About.*/
		Gtk::HBox About3;/**<Gtk::HBox da tela PRINCIPAL::About.*/
		Gtk::Image LogoAbout;/**<Gtk::Image da tela PRINCIPAL::About onde é carregado o logo do desenvolvedor.*/
		Gtk::LinkButton LinkAbout;/**<Gtk::LinkButton da tela PRINCIPAL::About onde é disponibilizado o link do site do desenvolvedor.*/
		Gtk::Notebook GuiasAbout;/**<Gtk::Notebook da tela PRINCIPAL::About.*/
		Gtk::ScrolledWindow BarraT1;/**<Gtk::ScrolledWindow do PRINCIPAL::TCreditos.*/
		Gtk::ScrolledWindow BarraT2;/**<Gtk::ScrolledWindow do PRINCIPAL::TLicenca.*/
		Gtk::TextView TCreditos;/**<Gtk::TextView contendo os crédito de desenvolvimento.*/
		Gtk::TextView TLicenca;/**<Gtk::TextView contendo a licença de desenvolvimento.*/
		Glib::RefPtr<Gtk::TextBuffer> BufferCR;/**<Ponteiro de Gtk::TextBuffer para carregar o texto dos créditos de desenvolvimento.*/
		Glib::RefPtr<Gtk::TextBuffer> BufferLIC;/**<Ponteiro de Gtk::TextBuffer para carregar o texto da licença de desenvolvimento.*/
    	Gtk::Button AboutOK;/**<Gtk::Button da tela PRINCIPAL::About, responsável por fechá-la quando clicado.*/

		Gtk::Fixed CF_Tela;/**<Gtk::Fixed da tela PRINCIPAL::Conta.*/
		Gtk::Label CL_Nome;/**<Gtk::Label da tela PRINCIPAL::Conta.*/
		Gtk::Label CL_Login;/**<Gtk::Label da tela PRINCIPAL::Conta.*/
		Gtk::Label CL_Senha;/**<Gtk::Label da tela PRINCIPAL::Conta.*/
		Gtk::Entry CE_Nome;/**<Gtk::Entry da tela PRINCIPAL::Conta que contém o nome do usuário.*/
		Gtk::Entry CE_Login;/**<Gtk::Entry da tela PRINCIPAL::Conta que contém o login do usuário.*/
		Gtk::Entry CE_Senha;/**<Gtk::Entry da tela PRINCIPAL::Conta que contem a senha do usuário.*/
		Gtk::Button *CB_Alt;/**<Gtk::Button da tela PRINCIPAL::Conta que habilita a edição das informações do usuário.*/
		Gtk::Button *CB_AltS;/**<Gtk::Button da tela PRINCIPAL::Conta que edita a senha do usuário.*/
		Gtk::Button *CB_Salvar;/**<Gtk::Button da tela PRINCIPAL::Conta que salva a edição das informações do usuário.*/
		Gtk::CheckButton CC_Senha;/**<Gtk::CheckButton da tela PRINCIPAL::Conta, para visualizar a senha que inicialmente encontra-se da forma de '*'.*/

		Gtk::VBox VB_Contas;/**<Gtk::VBox da tela PRINCIPAL::Contas.*/
		Gtk::HBox HB_MContas;/**<Gtk::HBox da tela PRINCIPAL::Contas.*/
		Gtk::HBox HB_CContas;/**<Gtk::HBox da tela PRINCIPAL::Contas.*/
		Gtk::Label LC_Contas;/**<Gtk::Label da tela PRINCIPAL::Contas.*/
		Gtk::Entry EC_Contas;/**<Gtk::Entry da tela PRINCIPAL::Contas utilizada para pesquisas de nomes dos usuários.*/
		Gtk::Toolbar TB_Contas;/**<Gtk::Toolbar da tela PRINCIPAL::Contas.*/
		Gtk::ToolButton TBN_Contas;/**<Gtk::ToolButton da tela PRINCIPAL::Contas que aciona a tela de cadastro de um novo usuário.*/
		Gtk::ToolButton TBE_Contas;/**<Gtk::ToolButton da tela PRINCIPAL::Contas que edita um usuário selecionado.*/
		Gtk::ToolButton TBD_Contas;/**<Gtk::ToolButton da tela PRINCIPAL::Contas que deleta um usuário selecionado.*/
		Gtk::SeparatorToolItem STB_Contas;/**<Gtk::SeparatorToolItem da tela PRINCIPAL::Contas.*/
		Gtk::ScrolledWindow CSContas;/**<Gtk::ScrolledWindow do PRINCIPAL::CTContas.*/
		Gtk::TreeView CTContas;/**<Gtk::TreeView da tela PRINCIPAL::Contas.*/
		string n_codigo;/**<Atributo que guarda o novo código gerado pelo sistema.*/
		Gtk::Entry *N_ELogin;/**<Gtk::Entry usado na tela PRINCIPAL::Novo e PRINCIPAL::Editar que carrega a informação do login do usuário.*/
		Gtk::Entry *N_ENome;/**<Gtk::Entry usado na tela PRINCIPAL::Novo e PRINCIPAL::Editar que carrega a informação do nome do usuário.*/
		Gtk::Entry *N_ESenha;/**<Gtk::Entry usado na tela PRINCIPAL::Novo e PRINCIPAL::Editar que carrega a informação da senha do usuário.*/
		Gtk::ComboBoxText *N_CNivel; /**<Gtk::ComboBoxText usado na tela PRINCIPAL::Novo e PRINCIPAL::Editar para selecionar o nível de acesso do usuário.*/

		Gtk::VBox VB_Cliente;/**<Gtk::VBox da tela PRINCIPAL::Cliente.*/
		Gtk::HBox HB_MCliente;/**<Gtk::HBox da tela PRINCIPAL::Cliente.*/
		Gtk::HBox HB_CCliente;/**<Gtk::HBox da tela PRINCIPAL::Cliente.*/
		Gtk::Label LC_Cliente;/**<Gtk::Label da tela PRINCIPAL::Cliente.*/
		Gtk::Entry EC_Cliente;/**<Gtk::Entry da tela PRINCIPAL::Cliente utilizado para pesquisa de clientes pelo nome.*/
		Gtk::ScrolledWindow CS_Cliente;/**<Gtk::ScrolledWindow do PRINCIPAL::CT_Cliente.*/
		Gtk::TreeView CT_Cliente;/**<Gtk::TreeView da tela PRINCIPAL::Cliente.*/
		Gtk::Toolbar TB_Cliente;/**<Gtk::Toolbar da tela PRINCIPAL::Cliente.*/
		Gtk::ToolItem TI_Cliente[2];/**<Gtk::ToolItem da tela PRINCIPAL::Cliente.*/
		Gtk::ToolButton TBN_Cliente;/**<Gtk::ToolButton da tela PRINCIPAL::Cliente que aciona a ação de cadastramento de um novo cliente.*/
		Gtk::ToolButton TBE_Cliente;/**<Gtk::ToolButton da tela PRINCIPAL::Cliente que aciona a ação de edição de um cliente selecionado.*/
		Gtk::ToolButton TBD_Cliente;/**<Gtk::ToolButton da tela PRINCIPAL::Cliente que aciona a ação de exclusão de um cliente selecionado.*/
		Gtk::SeparatorToolItem STB_Cliente;/**<Gtk::SeparatorToolItem da tela PRINCIPAL::Cliente.*/
		Gtk::Entry *E_CodNov;/**<Gtk::Entry utilizada nas telas PRINCIPAL::Novo e PRINCIPAL::Editar para carregar informação do código do cliente selecionado.*/
		Gtk::Entry *E_NomeNov;/**<Gtk::Entry utilizada nas telas PRINCIPAL::Novo e PRINCIPAL::Editar para carregar informação do nome do cliente selecionado.*/
		Gtk::Entry *E_EndNov;/**<Gtk::Entry utilizada nas telas PRINCIPAL::Novo e PRINCIPAL::Editar para carregar informação do endereço do cliente selecionado.*/
		Gtk::Entry *E_DocNov;/**<Gtk::Entry utilizada nas telas PRINCIPAL::Novo e PRINCIPAL::Editar para carregar informação do documento do cliente selecionado.*/

		Gtk::VBox VB_Servico;/**<Gtk::VBox da tela PRINCIPAL::Servico.*/
		Gtk::HBox HB_MServico;/**<Gtk::HBox da tela PRINCIPAL::Servico.*/
		Gtk::HBox HB_CServico;/**<Gtk::HBox da tela PRINCIPAL::Servico.*/
		Gtk::Label LC_Servico;/**<Gtk::Label da tela PRINCIPAL::Servico.*/
		Gtk::Entry EC_Servico;/**<Gtk::Entry da tela PRINCIPAL::Servico utilizada para pesquisar serviços pela descrição.*/
		Gtk::ScrolledWindow CS_Servico;/**<Gtk::ScrolledWindow do PRINCIPAL::CT_Servico.*/
		Gtk::TreeView CT_Servico;/**<Gtk::TreeView da tela PRINCIPAL::Servico.*/
		Gtk::Toolbar TB_Servico;/**<Gtk::Toolbar da tela PRINCIPAL::Servico.*/
		Gtk::ToolItem TI_Servico[2];/**<Gtk::ToolItem da tela PRINCIPAL::Servico.*/
		Gtk::ToolButton TBN_Servico;/**<Gtk::ToolButton da tela PRINCIPAL::Servico que aciona a ação de cadastramento de um novo serviço.*/
		Gtk::ToolButton TBE_Servico;/**<Gtk::ToolButton da tela PRINCIPAL::Servico que aciona a ação de edição de um serviço selecionado.*/
		Gtk::ToolButton TBD_Servico;/**<Gtk::ToolButton da tela PRINCIPAL::Servico que aciona a ação de exclusão de um serviço selecionado.*/
		Gtk::SeparatorToolItem STB_Servico;/**<Gtk::SeparatorToolItem da tela PRINCIPAL::Servico.*/
		Gtk::ComboBoxText *CBT_Novo;/**<Gtk::ComboBoxText utilizada nas telas PRINCIPAL::Novo e PRINCIPAL::Editar para selecionar um tipo de serviço.*/
		Gtk::Label *L_CodNov;/**<Gtk::ComboBoxText utilizada nas telas PRINCIPAL::Novo e PRINCIPAL::Editar para mostrar o código de um serviço.*/
		Gtk::Entry *E_DescNov;/**<Gtk::ComboBoxText utilizada nas telas PRINCIPAL::Novo e PRINCIPAL::Editar para mostrar a descrição de um serviço.*/
		Gtk::Entry *E_ValNov;/**<Gtk::ComboBoxText utilizada nas telas PRINCIPAL::Novo e PRINCIPAL::Editar para mostrar o valor unitário de um serviços.*/
		Gtk::RadioButton *Imp;/**<*/
		Gtk::RadioButton *SubISSQN;/**<*/

		Gtk::VBox BaixaB_Principal;/**<Gtk::VBox da janela PRINCIPAL::BaixaB*/
		Gtk::Frame BaixaB_FConsulta;/**<Gtk::Frame da janela PRINCIPAL::BaixaB*/
		Gtk::VBox BaixaB_Consulta;/**<Gtk::HBox da janela PRINCIPAL::BaixaB*/
		Gtk::HBox BaixaB_Consultas[3];/**<Gtk::HBox da janela PRINCIPAL::BaixaB*/
		Gtk::Label BaixaB_L[6];/**<Gtk::Label da janela PRINCIPAL::BaixaB*/
		Gtk::Entry BaixaB_Codigo;/**<Gtk::Entry da janela PRINCIPAL::BaixaB*/
		Gtk::Entry BaixaB_Numero;/**<Gtk::Entry da janela PRINCIPAL::BaixaB*/
		Gtk::Entry BaixaB_Nome;/**<Gtk::Entry da janela PRINCIPAL::BaixaB*/
		Gtk::Entry BaixaB_DataI;/**<Gtk::Entry da janela PRINCIPAL::BaixaB*/
		Gtk::Entry BaixaB_DataF;/**<Gtk::Entry da janela PRINCIPAL::BaixaB*/
		Glib::RefPtr<Gtk::ListStore> baixa_nome; /**<Ponteiro especial para utilização de estrurura de armazenamento.*/
		Glib::RefPtr<Gtk::EntryCompletion> BNomes_List; /**<Ponteiro especial para autocompletar dados dos funcionários.*/
		Glib::RefPtr<Gtk::ListStore> baixa_debitos; /**<Ponteiro especial para utilização de estrurura de armazenamento.*/
		Gtk::ScrolledWindow S_Debitos; /**<Gtk::ScrolledWindow utilizado para adicionar barra de rolagem no PRINCIPAL::T_Debitos.*/
		Gtk::TreeView T_Debitos; /**<Gtk::TreeView onde é carregado o Movimento de débitos dos clientes.*/
		Gtk::HBox BaixaB_Baixa;/**<Gtk::HBox da janela PRINCIPAL::BaixaB*/
		Gtk::Button *BaixaB_Baixar;/**<Gtk::Button da janela PRINCIPAL::BaixaB*/
		Gtk::Entry BaixaB_DataB;/**<Gtk::Entry da janela PRINCIPAL::BaixaB*/

		Gtk::VBox Saldos_Principal;/**<Gtk::VBox da janela PRINCIPAL::Saldos*/
		Gtk::HBox Saldos_Menu;/**<Gtk::HBox da janela PRINCIPAL::Saldos*/
		Gtk::HBox Saldos_Data;/**<Gtk::HBox da janela PRINCIPAL::Saldos*/
		Gtk::HBox Saldos_Saldo[10];/**<Gtk::HBox da janela PRINCIPAL::Saldos*/
		Gtk::Toolbar Saldos_MToolBar;/**<Gtk::Toolbar da janela PRINCIPAL::Saldos*/
		Gtk::ToolButton Saldos_ToolButton[5];/**<Gtk::ToolButton da janela PRINCIPAL::Saldos*/
		Gtk::Label Saldos_Label[10];/**<Gtk::Label da janela PRINCIPAL::Saldos*/
		Gtk::Entry Saldos_EData;/**<Gtk::Entry da janela PRINCIPAL::Saldos*/
		Gtk::Entry Saldos_ESaldo[10];/**<Gtk::Entry da janela PRINCIPAL::Saldos*/
		Gtk::HSeparator Saldos_Linhas[3];/**<Gtk::HSeparator da janela PRINCIPAL::Saldos*/
		Gtk::Button Saldos_Salvar;/**<*/
		Gtk::Button Saldos_Atualizar;/**<*/
		Gtk::Button Saldos_Alterar;/**<*/

		Gtk::HBox *HB_Ajuste;/**<*/
		Gtk::VBox *VB_Ajuste;/**<*/
		Gtk::Label *L_Ajuste;/**<*/
		Gtk::HSeparator *HSP_Ajuste;
		Gtk::Entry *EA_Data, *EA_Recibo, *EA_Valor;
		Gtk::Button *BTOK_Ajuste, *BTOUT_Ajuste, *BTIMP_Ajuste;
		Gtk::ComboBoxText *CBA_Tipo;
		Glib::RefPtr<Gtk::ListStore> ajuste_dataref, ajuste_reciboref;
		Glib::RefPtr<Gtk::EntryCompletion> ECA_Data, ECA_Recibo;

		Gtk::Entry *ER_Data, *ER_Recibo;
		string ER_Valor;
		int total_recibos;
		Glib::RefPtr<Gtk::ListStore> re_dataref, re_reciboref;
		Glib::RefPtr<Gtk::EntryCompletion> ECR_Data, ECR_Recibo;

		Gtk::Button *BTR_Adicionar, *BTR_Remover, *BTR_Imprimir;
		Gtk::ScrolledWindow *S_Recs;
		Gtk::TreeView *T_Recs;
		Glib::RefPtr<Gtk::ListStore> re_impressao;
		Gtk::TreeModel::Row recibo_selecionado;

		/**Método utilizado para carregar as informações de Ajustes*/
		void dados_ajuste(int);

		/** Método utilizado para mudar o cursos de posição em uma Entry. */
		void set_posicao(Gtk::Entry * , int );
		/**Método utilizado para checagem */
		void checagem (int);

		Gtk::ProgressBar *P_Barras;/**<*/

	private:
		BANCOPG *conexao;/**<Ponteiro para conexão com banco de dados.*/
		
		char *data_hoje;/**<Atributo que guarda a data de hoje.*/
		string cod_func;/**<Atributo que guarda o código do usuário logado.*/
		string nome;/**<Atributo que guarda o nome do usuário logado.*/
		string login;/**<Atributo que guarda o login do usuário logado.*/
		string senha;/**<Atributo que guarda a senha do usuário logado.*/
		int acao;/**<Atributo que guarda a ação a ser executada.\n 1-Novo\n 2-Editar\n 3-Deletar.*/
		int logado;/**<Atributo que controla o status do login.\n 0-Não Logado\n 1-Logado.*/
		int n_acesso;/**<Atributo que guarda o nível de acesso do usuário logado.*/
		int cod_sel;/**<Atributo que guarda um código selecionado, este código pode ser de um funcionário, um cliente ou um serviço.*/
		int e_s;/**<Atributo indicando o tipo de entrada.*/
		int pos_entry;/**<Atributo que guarda a posição inicial de um texto de Entry.*/
		int entry_ativa;/**<Atributo que informa qual entry está ativa.*/

		int saldo_total;/**<Atributo de contagem de registros de saldos*/
		int saldo_pagina;/**<Atributo de paginação da visualização dos registros de saldos*/
		bool saldo_alt;/**<Atributo de controle de alteração de saldo.*/
			
		Gtk::VBox Box_Principal;/**<Gtk::VBox usado na tela PRINCIPAL::Principal.*/
		Gtk::VBox Box_Conteudo;/**<Gtk::VBox usado na tela PRINCIPAL::Principal.*/
		Gtk::HBox Box_Menu;/**<Gtk::HBox usado na tela PRINCIPAL::Principal.*/

		/**Método utilizado para fechar uma tela.*/
		void sair(int);
		/**Método utilizado para testar a conexão.*/
		void testar_conexao();
		/**Método utilizado para editar a conexão.*/
		void editar_conexao(bool );
		/**Método utilizado para salvar alteração da conexão.*/
		void alterar_conexao();
		/**Método utilizado para carregar a tela PRINCIPAL::About.*/
		void info();
		/**Método utilizado para trocar a senha de um usuário.*/
		void mudar_senha();
		/**Método utilizado para carregar o PRINCIPAL::Novo para cadastramento de um novo usuário, serviço ou cliente.*/
		void novo();
		/**Método utilizado para gravar dados na base de dados.*/
		void gravar_dados();
		/**Método utilizado para retornar um novo código no sistema.*/
		string novo_codigo();
		/**Método utilizado para mover-se pelas Gtk::Entry de uma Gtk::Window.*/
		void tabular(int );
		/**Método utilizado para mover-se pelas Gtk::Entry de uma Gtk::Window.*/
		void tabular2(Gtk::Window *,Gtk::Widget *);
		/**Método utilizado para fazer importação de informações para a base de dados.*/
		void importar(int );
		/**Método utilizado para carregar o PRINCIPAL::Contas ou PRINCIPAL::Conta.*/
		void m_conta(int );
		/**Método utilizado para carregar as janelas do sistema.*/
		void carregar_janela();
		/**Método utilizado para acionar a exclusão de um registro do sistema.*/
		void deletar();
		/**Método utilizado para carregar o PRINCIPAL::Cliente ou PRINCIPAL::Servico.*/
		void m_cadastro(int );
		/**Método acionado após a seleção do tipo de serviço.*/
		void sel_tipo();
		/**Método utilizado para checar o documento digitado.*/
		void checar_documento(int );
		/**Método utilizado para checar o documento digitado.*/
		void checar_documento2(int ,int );

		int janelas;/**<Atributo que controla qual janela está sendo carregada.*/
			
		int p_status;/**<Atributo que controla o status de PRINCIPAL::Principal.*/
		int c_status;/**<Atributo que controla o status de PRINCIPAL::Conta.*/
		int cs_status;/**<Atributo que controla o status de PRINCIPAL::Contas.*/
		int c_clistatus;/**<Atributo que controla o status de PRINCIPAL::Cliente.*/
		int c_servstatus;/**<Atributo que controla o status de PRINCIPAL::Servico.*/
		int baixabstatus;/**<Atributo que controla o status de PRINCIPAL::BaixaB*/
		int saldos_status;/**<Atributo que controla o status de PRINCIPAL::Saldos*/

		/**Método utilizado para editar informações do sistema.*/
		void editar_dados();
		/**Método utilizado para mostrar a senha de um usuário.*/
		void mostrar_senha();
		/**Método utilizado para carregar os dados do sistema.*/
		void carregar_dados();
		/**Método utilizado para gravar informações alteradas.*/
		void gravar_alterado();
		/**Método utilizado para checar o login do sistema.*/
		void checar_login();
		Glib::RefPtr<Gdk::Pixbuf> ponteiro_icon;/**<Ponteiro que guarda o ícone do sistema.*/

		ofstream conf_escreve;/**<Atributo utilizado para gravar informações da conexão principal do banco de dados no devido arquivo de configurações.*/
		Gtk::Window editar;/**<Gtk::Window utilizada para editar a configuração da conexão principal com o banco de dados.*/
		Gtk::Fixed tabela_fixa;/**<Gtk::Fixed utilizado na janela PRINCIPAL::editar.*/
		Gtk::Button botao_alterar;/**<Gtk::Button utilizado na janela PRINCIPAL::editar.*/
		Gtk::Button botao_selecionar;/**<Gtk::Button utilizado na janela PRINCIPAL::editar.*/
		Gtk::HButtonBox caixa_botao;/**<Gtk::HButtonBox utilizado na janela PRINCIPAL::editar.*/
		Gtk::VBox Box_Conexao;/**<Gtk::VBox utilizado na janela PRINCIPAL::editar.*/
		Gtk::Label labHost;/**<Gtk::Label utilizado na janela PRINCIPAL::editar.*/
		Gtk::Label labBanco;/**<Gtk::Label utilizado na janela PRINCIPAL::editar.*/
		Gtk::Label labUser;/**<Gtk::Label utilizado na janela PRINCIPAL::editar.*/
		Gtk::Label labSenha;/**<Gtk::Label utilizado na janela PRINCIPAL::editar.*/
		Gtk::Label labSGBD;/**<Gtk::Label utilizado na janela PRINCIPAL::editar.*/
		Gtk::Entry entHost;/**<Gtk::Entry utilizado na janela PRINCIPAL::editar.*/
		Gtk::Entry entBanco;/**<Gtk::Entry utilizado na janela PRINCIPAL::editar.*/
		Gtk::Entry entUser;/**<Gtk::Entry utilizado na janela PRINCIPAL::editar.*/
		Gtk::Entry entSenha;/**<Gtk::Entry utilizado na janela PRINCIPAL::editar.*/
		Gtk::Entry entSGBD;/**<Gtk::Entry utilizado na janela PRINCIPAL::editar.*/

		/**Método utilizado para atualizar a PRINCIPAL::BarraStatus1.*/
		bool run();
		
		RECIBO *Recibo;/**<Ponteiro para a classe RECIBO*/
		/**Método utilizado para acionar o PRINCIPAL::Recibo.*/
		void recibo();

		/**Método utilizado para checar cliente.*/
		string verificar_cliente(string []);
		/**Método utilizado para checar serviço.*/
		string verificar_servico(string []);

		RELATORIO *Relatorio;/**<Ponteiro para a classe RELATORIO.*/
		/**Método utilizado para acionar o PRINCIPAL::Relatorio.*/
		void relatorio(int );

		/**Método para baixa de recibos em Débito.*/
		void baixar_debitos();
		/**Método utilizado para preparar dados de EntryCompletion*/
		void preparar_dados (int);
		/**Método utilizado para checar débitos de um  cliente.*/
		void checar_debito(Gtk::Entry *, int);
		/**Método utilizado para baixar recibos de débitos selecionados.*/
		void baixar_recibos();
		/**Método utilizado para carregar os debitos de um cliente.*/
		void dados_debitos(string, int checar=1);
		/**Método utilizado para checar o código de um serviço de saída*/
		string servico_saida (string);
		/**Método utilizado para carregar a janela dos Saldos do Sistema */
		void saldos_sistema();
		/**Método utilizado para carregar a janela dos Saldos do Sistema */
		void saldos(int);
		/**Método utilizado para carregar a janela dos Saldos do Sistema */
		void saldos_paginar(int);
		/**Método utilizado para carregar a janela dos Saldos do Sistema */
		void saldos_novo();
		/**Método utilizado para carregar a janela dos Saldos do Sistema */
		void saldos_calcular(int );
		/**Método utilizado para carregar a janela dos Saldos do Sistema */
		void saldos_salvar();
		/**Método utilizado para carregar a janela dos Saldos do Sistema */
		void saldos_salvarA();
		/**Método utilizado para carregar a janela dos Saldos do Sistema */
		void saldos_alterar();
		/**Método utilizado para processar os acertos de importação */
		void checagem_impostoT();
		/***/
		void checagem_imposto(int );
		/***/
		float fator_prog;
		/***/
		bool progresso_checagem();
		/***/
		void checar_recibo();
		/**Ajustar valor do recibo*/
		void ajustar_centavos ();
		void salvar_ajuste();
		/**Impressao em Lote: Crédito*/
		void imprimir_credLote();
		/** Adicionar recibos para Re-Impressão*/
		void adicionar_recibo();
		/** Selecionar Recibo*/
		void selecionar_recibo(const Gtk::TreeModel::Path& , Gtk::TreeViewColumn* );
		/** Remover recibos para Re-Impressão*/
		void remover_recibo();
		/** Imprimir recibos*/
		void imprimir_recibos();
		/** Livro Diário Auxiliar */
		void livro_caixa();
		/** Contas Corrente */
		void cconta(int);
  };

#endif /*__PRINCIPAL_H___*/